0

我正在尝试将“绿色团队”添加到我在网上找到的示例评分 GUI。出于某种原因,代码可以编译,但它只与最初的两个团队一起运行。我已经尝试过一些笨拙的尺寸/位置,并且由于这些修改没有观察到任何变化(根本没有变化),我承认我必须缺少一些必要的属性或其他东西。有什么帮助吗?这是代码:

import javax.swing.*;

import java.awt.Color;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;


public class ButtonDemo_Extended3 implements  ActionListener{



    // Definition of global values and items that are part of the GUI.

    int redScoreAmount = 0;

    int blueScoreAmount = 0;
    int greenScoreAmount = 0;



    JPanel titlePanel, scorePanel, buttonPanel;

    JLabel redLabel, blueLabel,greenLabel, redScore, blueScore, greenScore;

    JButton redButton, blueButton, greenButton,resetButton;



    public JPanel createContentPane (){



        // We create a bottom JPanel to place everything on.

        JPanel totalGUI = new JPanel();

        totalGUI.setLayout(null);



        // Creation of a Panel to contain the title labels

        titlePanel = new JPanel();

        titlePanel.setLayout(null);

        titlePanel.setLocation(0, 0);

        titlePanel.setSize(500, 500);

        totalGUI.add(titlePanel);



        redLabel = new JLabel("Red Team");

        redLabel.setLocation(300, 0);

        redLabel.setSize(100, 30);

        redLabel.setHorizontalAlignment(0);

        redLabel.setForeground(Color.red);

        titlePanel.add(redLabel);



        blueLabel = new JLabel("Blue Team");

        blueLabel.setLocation(900, 0);

        blueLabel.setSize(100, 30);

        blueLabel.setHorizontalAlignment(0);

        blueLabel.setForeground(Color.blue);

        titlePanel.add(blueLabel);

    greenLabel = new JLabel("Green Team");

        greenLabel.setLocation(600, 0);

        greenLabel.setSize(100, 30);

        greenLabel.setHorizontalAlignment(0);

        greenLabel.setForeground(Color.green);

        titlePanel.add(greenLabel);



        // Creation of a Panel to contain the score labels.

        scorePanel = new JPanel();

        scorePanel.setLayout(null);

        scorePanel.setLocation(10, 40);

        scorePanel.setSize(500, 30);

        totalGUI.add(scorePanel);



        redScore = new JLabel(""+redScoreAmount);

        redScore.setLocation(0, 0);

        redScore.setSize(40, 30);

        redScore.setHorizontalAlignment(0);

        scorePanel.add(redScore);

    greenScore = new JLabel(""+greenScoreAmount);

        greenScore.setLocation(60, 0);

        greenScore.setSize(40, 30);

        greenScore.setHorizontalAlignment(0);

        scorePanel.add(greenScore);



        blueScore = new JLabel(""+blueScoreAmount);

        blueScore.setLocation(130, 0);

        blueScore.setSize(40, 30);

        blueScore.setHorizontalAlignment(0);

        scorePanel.add(blueScore);



        // Creation of a Panel to contain all the JButtons.

        buttonPanel = new JPanel();

        buttonPanel.setLayout(null);

        buttonPanel.setLocation(10, 80);

        buttonPanel.setSize(2600, 70);

        totalGUI.add(buttonPanel);



        // We create a button and manipulate it using the syntax we have

        // used before. Now each button has an ActionListener which posts 

        // its action out when the button is pressed.

        redButton = new JButton("Red Score!");

        redButton.setLocation(0, 0);

        redButton.setSize(30, 30);

        redButton.addActionListener(this);

        buttonPanel.add(redButton);



        blueButton = new JButton("Blue Score!");

        blueButton.setLocation(150, 0);

        blueButton.setSize(30, 30);

        blueButton.addActionListener(this);

        buttonPanel.add(blueButton);

    greenButton = new JButton("Green Score!");

        greenButton.setLocation(250, 0);

        greenButton.setSize(30, 30);

        greenButton.addActionListener(this);

        buttonPanel.add(greenButton);



        resetButton = new JButton("Reset Score");

        resetButton.setLocation(0, 100);

        resetButton.setSize(50, 30);

        resetButton.addActionListener(this);

        buttonPanel.add(resetButton);



        totalGUI.setOpaque(true);

        return totalGUI;

    }



    // This is the new ActionPerformed Method.

    // It catches any events with an ActionListener attached.

    // Using an if statement, we can determine which button was pressed

    // and change the appropriate values in our GUI.

    public void actionPerformed(ActionEvent e) {

        if(e.getSource() == redButton)

        {

            redScoreAmount = redScoreAmount + 1;

            redScore.setText(""+redScoreAmount);

        }

        else if(e.getSource() == blueButton)

        {

            blueScoreAmount = blueScoreAmount + 1;

            blueScore.setText(""+blueScoreAmount);

        }
    else if(e.getSource() == greenButton)

        {

            greenScoreAmount = greenScoreAmount + 1;

            greenScore.setText(""+greenScoreAmount);

        }

        else if(e.getSource() == resetButton)

        {

            redScoreAmount = 0;

            blueScoreAmount = 0;
        greenScoreAmount = 0;

            redScore.setText(""+redScoreAmount);

            blueScore.setText(""+blueScoreAmount);
        greenScore.setText(""+greenScoreAmount);

        }

    }



    private static void createAndShowGUI() {



        JFrame.setDefaultLookAndFeelDecorated(true);

        JFrame frame = new JFrame("[=] JButton Scores! [=]");



        //Create and set up the content pane.

        ButtonDemo_Extended demo = new ButtonDemo_Extended();

        frame.setContentPane(demo.createContentPane());



        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setSize(1024, 768);

        frame.setVisible(true);

    }



    public static void main(String[] args) {

        //Schedule a job for the event-dispatching thread:

        //creating and showing this application's GUI.

        SwingUtilities.invokeLater(new Runnable() {

            public void run() {

                createAndShowGUI();

            }

        });

    }

}
4

2 回答 2

1
import javax.swing.*;

import java.awt.Color;
import java.awt.FlowLayout;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;


public class ButtonDemo_Extended3 implements  ActionListener{



// Definition of global values and items that are part of the GUI.

int redScoreAmount = 0;

int blueScoreAmount = 0;
int greenScoreAmount = 0;



JPanel titlePanel, scorePanel, buttonPanel;

JLabel redLabel, blueLabel,greenLabel, redScore, blueScore, greenScore;

JButton redButton, blueButton, greenButton,resetButton;



public JPanel createContentPane (){



    // We create a bottom JPanel to place everything on.

    JPanel totalGUI = new JPanel();

    totalGUI.setLayout(null);



    // Creation of a Panel to contain the title labels

    titlePanel = new JPanel();

    titlePanel.setLayout(new FlowLayout());

    titlePanel.setLocation(0, 0);

    titlePanel.setSize(500, 500);





    redLabel = new JLabel("Red Team");

    redLabel.setLocation(300, 0);

    redLabel.setSize(100, 30);

    redLabel.setHorizontalAlignment(0);

    redLabel.setForeground(Color.red);

    titlePanel.add(redLabel, 0 );



    blueLabel = new JLabel("Blue Team");

    blueLabel.setLocation(900, 0);

    blueLabel.setSize(100, 30);

    blueLabel.setHorizontalAlignment(0);

    blueLabel.setForeground(Color.blue);

    titlePanel.add(blueLabel, 1);

greenLabel = new JLabel("Green Team");

    greenLabel.setLocation(600, 0);

    greenLabel.setSize(100, 30);

    greenLabel.setHorizontalAlignment(0);

    greenLabel.setForeground(Color.green);

    titlePanel.add(greenLabel);



    // Creation of a Panel to contain the score labels.

    scorePanel = new JPanel();

    scorePanel.setLayout(null);

    scorePanel.setLocation(10, 40);

    scorePanel.setSize(500, 30);





    redScore = new JLabel(""+redScoreAmount);

    redScore.setLocation(0, 0);

    redScore.setSize(40, 30);

    redScore.setHorizontalAlignment(0);

    scorePanel.add(redScore);

greenScore = new JLabel(""+greenScoreAmount);

    greenScore.setLocation(60, 0);

    greenScore.setSize(40, 30);

    greenScore.setHorizontalAlignment(0);

    scorePanel.add(greenScore);



    blueScore = new JLabel(""+blueScoreAmount);

    blueScore.setLocation(130, 0);

    blueScore.setSize(40, 30);

    blueScore.setHorizontalAlignment(0);

    scorePanel.add(blueScore);



    // Creation of a Panel to contain all the JButtons.

    buttonPanel = new JPanel();

    buttonPanel.setLayout(null);

    buttonPanel.setLocation(10, 80);

    buttonPanel.setSize(2600, 70);





    // We create a button and manipulate it using the syntax we have

    // used before. Now each button has an ActionListener which posts 

    // its action out when the button is pressed.

    redButton = new JButton("Red Score!");

    redButton.setLocation(0, 0);

    redButton.setSize(30, 30);

    redButton.addActionListener(this);

    buttonPanel.add(redButton);



    blueButton = new JButton("Blue Score!");

    blueButton.setLocation(150, 0);

    blueButton.setSize(30, 30);

    blueButton.addActionListener(this);

    buttonPanel.add(blueButton);

greenButton = new JButton("Green Score!");

    greenButton.setLocation(250, 0);

    greenButton.setSize(30, 30);

    greenButton.addActionListener(this);

    buttonPanel.add(greenButton);



    resetButton = new JButton("Reset Score");

    resetButton.setLocation(0, 100);

    resetButton.setSize(50, 30);

    resetButton.addActionListener(this);

    buttonPanel.add(resetButton);



    totalGUI.setOpaque(true);

    totalGUI.add(buttonPanel);
    totalGUI.add(scorePanel);
    totalGUI.add(titlePanel);

    return totalGUI;

}



// This is the new ActionPerformed Method.

// It catches any events with an ActionListener attached.

// Using an if statement, we can determine which button was pressed

// and change the appropriate values in our GUI.

public void actionPerformed(ActionEvent e) {

    if(e.getSource() == redButton)

    {

        redScoreAmount = redScoreAmount + 1;

        redScore.setText(""+redScoreAmount);

    }

    else if(e.getSource() == blueButton)

    {

        blueScoreAmount = blueScoreAmount + 1;

        blueScore.setText(""+blueScoreAmount);

    }
else if(e.getSource() == greenButton)

    {

        greenScoreAmount = greenScoreAmount + 1;

        greenScore.setText(""+greenScoreAmount);

    }

    else if(e.getSource() == resetButton)

    {

        redScoreAmount = 0;

        blueScoreAmount = 0;
    greenScoreAmount = 0;

        redScore.setText(""+redScoreAmount);

        blueScore.setText(""+blueScoreAmount);
    greenScore.setText(""+greenScoreAmount);

    }

}



private static void createAndShowGUI() {



    JFrame.setDefaultLookAndFeelDecorated(true);

    JFrame frame = new JFrame("[=] JButton Scores! [=]");



    //Create and set up the content pane.

    ButtonDemo_Extended3 demo = new ButtonDemo_Extended3();

    frame.setContentPane(demo.createContentPane());



    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.setSize(1024, 768);

    frame.setVisible(true);

}



public static void main(String[] args) {

    //Schedule a job for the event-dispatching thread:

    //creating and showing this application's GUI.

    SwingUtilities.invokeLater(new Runnable() {

        public void run() {

            createAndShowGUI();

        }

    });

}

}

您必须使用布局管理器才能显示您的小部件。在这种情况下,我使用了 FlowLayout()。此外,请确保先在面板中添加元素,然后再将面板添加到其父面板。

现在,代码可以按照您的需要工作,但是您应该再次使用特定的布局来安排框架内的面板。

于 2012-10-17T23:25:22.497 回答
0

如果我在未修改的情况下运行您的代码,我只会看到“红队”标签,以及一些太小而无法阅读文本的按钮(其中一些仅在鼠标悬停时才会出现)。

如果您注释掉所有空布局:

    //buttonPanel.setLayout(null);

然后所有三个按钮和标签都会正确显示。

不使用布局管理器并使用绝对定位是可能的(请参阅Java Swing 教程页面关于这个确切的主题),但通常不推荐。在 Swing 教程的容器内布局组件课程中有很多关于使用布局管理器的信息。

于 2012-10-17T23:13:25.353 回答