0

事实证明,这比我想象的要困难得多。我想要做的就是将这个 JPanel “粘贴”到框架的左侧。这是我到目前为止所拥有的。(如果可能,我不想使用 GridBagLayout(我是 java 新手))。

labels = new JPanel();
JLabel currentWordLA = new JLabel("Current word:");
JLabel triedLettersLA = new JLabel("Tried letters:");
JLabel triesLeftLA = new JLabel("Tries remaining:");
JButton restart = new JButton("Reset");

labels.setLayout(new BoxLayout(labels, BoxLayout.Y_AXIS));
labels.add(currentWordLA);
labels.add(triedLettersLA);
labels.add(triesLeftLA);
scorePanel.add(labels, BorderLayout.WEST);

编辑:对不起,这是完整的代码。它有点像框架内的面板中的面板。只是试图让框架与左侧对齐。谢谢!

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class Hangman {

    JFrame frame;
    private String[] wordList = {
        "computer", "java", "activity", "alaska", "appearance", "article",
        "automobile", "basket", "birthday", "canada", "central", "character",
        "chicken", "chosen", "cutting", "daily", "darkness", "diagram",
        "disappear", "driving", "effort", "establish", "exact",
        "establishment", "fifteen", "football", "foreign", "frequently",
        "frighten", "function", "gradually", "hurried", "identity",
        "importance", "impossible", "invented", "italian", "journey",
        "lincoln", "london", "massage", "minerals", "outer", "paint",
        "particles", "personal", "physical", "progress", "quarter",
        "recognise", "replace", "rhythm", "situation", "slightly",
        "steady", "stepped", "strike", "successful", "sudden",
        "terrible", "traffic", "unusual", "volume", "yesterday"};
    private String mysteryWord;
    private boolean finished = false;
    private boolean won = false;
    private Button a[];

    public static void main(String[] args) {
        Hangman gui = new Hangman();
        gui.go();
    }

    class myDrawPanel extends JPanel {

        public void paintComponent(Graphics g) {
            setBackground(Color.white);
            g.setColor(Color.gray);
            g.fillRect(50, 200, 150, 20);
            g.fillRect(90, 20, 10, 200);
            g.fillRect(90, 20, 60, 10);
            g.setColor(Color.black);
            g.fillRect(145, 20, 5, 25);
        }
    }

    public void go() {
        frame = new JFrame("Hangman");
        JPanel topPanel = new JPanel();
        myDrawPanel noosePanel = new myDrawPanel();
        JPanel bottomPanel = new JPanel();
        JPanel scorePanel = new JPanel();

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(2, 0));
        bottomPanel.setLayout(new GridLayout(0, 2));
        scorePanel.setSize(20, 100);

        noosePanel.setBorder(BorderFactory.createTitledBorder("Your progress."));
        topPanel.setBorder(BorderFactory.createTitledBorder("Your arsenal."));
        scorePanel.setBorder(BorderFactory.createTitledBorder("Your score."));
        frame.add(topPanel);
        frame.add(bottomPanel);
        bottomPanel.add(scorePanel);
        bottomPanel.add(noosePanel);

        //The Stats section.
        JPanel labels = new JPanel();
        JLabel currentWordLA = new JLabel("Current word:");
        JLabel triedLettersLA = new JLabel("Tried letters:");
        JLabel triesLeftLA = new JLabel("Tries remaining:");
        JButton restart = new JButton("Reset");

        labels.setLayout(new BoxLayout(labels, BoxLayout.Y_AXIS));
        labels.add(currentWordLA);
        labels.add(triedLettersLA);
        labels.add(triesLeftLA);
        scorePanel.add(labels, BorderLayout.WEST);

        int i;
        StringBuffer buffer;
        a = new Button[26];
        topPanel.setLayout(new GridLayout(4, 0, 10, 10));

        // create all 26 buttons
        for (i = 0; i < 26; i++) {
            buffer = new StringBuffer();
            buffer.append((char) (i + 65));
            a[i] = new Button(buffer.toString());
            a[i].setSize(100, 100);
            //a[i].addActionListener( this );
            topPanel.add(a[i]);
        }

        frame.setSize(500, 500);
        frame.setResizable(false);
        frame.setVisible(true);
    }
}
4

2 回答 2

2

尝试向 BorderLayout.CENTER 添加一些内容,如下所示:

    scorepanel.add(new JPanel(), BorderLayout.CENTER); //I guess scorepanel is your frame
    //your code here
于 2012-05-06T11:21:21.143 回答
2

我喜欢你的布局。我对您的示例进行了一些更改:

  • 看起来MyDrawPanel只是为了画画。如果你覆盖getPreferredSize,你可以使用pack()而不是调用setSize()很多。在内部paintComponent,相对于面板getWidth和进行绘图getHeight,然后它看起来适合任何尺寸。

  • 我使用JLabel.LEFT了标签,并将背景颜色设为灰色,以便您可以看到布局的位置。这里还有更多。

  • 如果您使用标准命名,例如MyDrawPanel,其他人会更容易阅读您的代码。

代码:

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class Hangman {

    JFrame frame;
    private String[] wordList = {
        "computer", "java", "activity", "alaska", "appearance", "article",
        "automobile", "basket", "birthday", "canada", "central", "character",
        "chicken", "chosen", "cutting", "daily", "darkness", "diagram",
        "disappear", "driving", "effort", "establish", "exact",
        "establishment", "fifteen", "football", "foreign", "frequently",
        "frighten", "function", "gradually", "hurried", "identity",
        "importance", "impossible", "invented", "italian", "journey",
        "lincoln", "london", "massage", "minerals", "outer", "paint",
        "particles", "personal", "physical", "progress", "quarter",
        "recognise", "replace", "rhythm", "situation", "slightly",
        "steady", "stepped", "strike", "successful", "sudden",
        "terrible", "traffic", "unusual", "volume", "yesterday"};
    private String mysteryWord;
    private boolean finished = false;
    private boolean won = false;
    private Button a[];

    public static void main(String[] args) {
        Hangman gui = new Hangman();
        gui.go();
    }

    class MyDrawPanel extends JPanel {

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(256, 256);
        }

        @Override
        public void paintComponent(Graphics g) {
            setBackground(Color.white);
            g.setColor(Color.gray);
            g.fillRect(50, 200, 150, 20);
            g.fillRect(90, 20, 10, 200);
            g.fillRect(90, 20, 60, 10);
            g.setColor(Color.black);
            g.fillRect(145, 20, 5, 25);
        }
    }

    public void go() {
        frame = new JFrame("Hangman");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(2, 0));

        JPanel topPanel = new JPanel();
        topPanel.setBorder(BorderFactory.createTitledBorder("Your arsenal."));
        MyDrawPanel noosePanel = new MyDrawPanel();
        noosePanel.setBorder(BorderFactory.createTitledBorder("Your progress."));
        JPanel bottomPanel = new JPanel(new GridLayout(0, 2));
        JPanel scorePanel = new JPanel(new GridLayout());
        scorePanel.setBorder(BorderFactory.createTitledBorder("Your score."));

        frame.add(topPanel);
        frame.add(bottomPanel);
        bottomPanel.add(scorePanel);
        bottomPanel.add(noosePanel);

        //The Stats section.
        JPanel labels = new JPanel();
        labels.setLayout(new BoxLayout(labels, BoxLayout.Y_AXIS));
        labels.setBackground(Color.lightGray);
        JLabel currentWordLA = new JLabel("Current word:", JLabel.LEFT);
        JLabel triedLettersLA = new JLabel("Tried letters:", JLabel.LEFT);
        JLabel triesLeftLA = new JLabel("Tries remaining:", JLabel.LEFT);

        labels.add(currentWordLA);
        labels.add(triedLettersLA);
        labels.add(triesLeftLA);
        scorePanel.add(labels);

        int i;
        StringBuffer buffer;
        a = new Button[26];
        topPanel.setLayout(new GridLayout(4, 0, 10, 10));

        // create all 26 buttons
        for (i = 0; i < 26; i++) {
            buffer = new StringBuffer();
            buffer.append((char) (i + 65));
            a[i] = new Button(buffer.toString());
            //a[i].addActionListener( this );
            topPanel.add(a[i]);
        }
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}
于 2012-05-07T14:18:22.577 回答