-1

ちょっと私は私のコードとして次のものを持っています.10個のjbuttonsがあります。問題は、ボタンをクリックするたびに setVisible(flase) を設定するアクションが実行されますが、同時にその横のコンポーネントも消えてしまうことです。しかし、技術的にまだ表示されているコンポーネントにカーソルを合わせると、それらはすべて再び表示されます。例えば。プログラムに準拠して実行すると、プログラムは機能しますが、コンポーネントを表示するには、コンポーネントにカーソルを合わせる必要があります(このようにしたくありません)。コンポーネントが表示されたら、ボタン 1 をクリックすると、実行されるボタン 1 のアクションは one.setVisible(false); を設定することです。それはできますが、それが完了すると、ボタン 2 も一緒に消えます。しかし、ボタン2にカーソルを合わせると画面に戻りますが、ボタン1にカーソルを合わせると再び表示されません。私が作ったように、それは消えます。

package dealORnodeal;

import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextArea;

public class Deal extends JFrame implements ActionListener
{
private Container contentPane = getContentPane();
private JButton one = new JButton("1"),two = new JButton("2"),three = new JButton("3"),
        four = new JButton("4"),five = new JButton("5"),ones = new JButton("6"),twos = new JButton("7"),
                threes = new JButton("8"),fours = new JButton("9"),fives = new JButton("10");
private JTextArea text = new JTextArea(266,103);
private JMenu menu1 = new JMenu("JumpTo");
private JMenuBar bar1 = new JMenuBar();
private ImagePanel bg = new ImagePanel(new ImageIcon("bg.jpg").getImage());
public Deal()
{

    paintComponent(getGraphics());
}
public void paintComponent(Graphics g)
{

    setTitle("Deal Or No Deal");
    setSize(800,850);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(false);
    setLayout(null);
    contentPane.add(bg);

    JMenuItem item1;

    item1 = new JMenuItem("Start Game");
    item1.addActionListener(this);
    menu1.add(item1);

    item1 = new JMenuItem("GoTo Rules");
    item1.addActionListener(this);
    menu1.add(item1);

    item1 = new JMenuItem("GoTo Credits");
    item1.addActionListener(this);
    menu1.add(item1);

    item1 = new JMenuItem("GoTo Menu");
    item1.addActionListener(this);

    menu1.add(item1);
    bar1.add(menu1);
    setJMenuBar(bar1);

    //GAME CODE
    text.setBounds(266, 200, 266,103);
    text.append("Welcome to The World ");

    one.setBounds(25,151,195,55);
    one.setBackground(new Color(255,215,0));
    one.addActionListener(this);

    two.setBounds(25,251,195,55);
    two.setBackground(new Color(255,215,0));
    two.addActionListener(this);

    three.setBounds(25,347,195,55);
    three.setBackground(new Color(255,215,0));
    three.addActionListener(this);

    four.setBounds(25,447,195,55);
    four.setBackground(new Color(255,215,0));
    four.addActionListener(this);

    five.setBounds(25,547,195,55);
    five.setBackground(new Color(255,215,0));
    five.addActionListener(this);

    ones.setBounds(583,151,195,55);
    ones.setBackground(new Color(255,215,0));
    ones.addActionListener(this);

    twos.setBounds(583,251,195,55);
    twos.setBackground(new Color(255,215,0));
    twos.addActionListener(this);

    threes.setBounds(583,347,195,55);
    threes.setBackground(new Color(255,215,0));
    threes.addActionListener(this);

    fours.setBounds(583,447,195,55);
    fours.setBackground(new Color(255,215,0));
    fours.addActionListener(this);

    fives.setBounds(583,547,195,55);
    fives.setBackground(new Color(255,215,0));
    fives.addActionListener(this);

    Container contentPane2 = new Container();

    add(one);
    add(two);
    add(three);
    add(four);
    add(five);
    add(ones);
    add(twos);
    add(threes);
    add(fours);
    add(fives);
    add(text);



    //GAME CODE END
    invalidate();
    setVisible(true);
}

@Override
public void actionPerformed(ActionEvent e) 
{

    //Game Boxes Response
    if(e.getSource()==one)
    {
        one.setVisible(false);
    }
    if(e.getSource()==two)
    {
        two.setVisible(false);
    }
    if(e.getSource()==three)
    {
        three.setVisible(false);
    }
    if(e.getSource()==four)
    {
        four.setVisible(false);
    }
    if(e.getSource()==five)
    {
        five.setVisible(false);
    }
    if(e.getSource()==ones)
    {
        ones.setVisible(false);
    }
    if(e.getSource()==twos)
    {
        twos.setVisible(false);
    }
    if(e.getSource()==threes)
    {
        threes.setVisible(false);
    }
    if(e.getSource()==fours)
    {
        fours.setVisible(false);
    }
    if(e.getSource()==fives)
    {
        fives.setVisible(false);
    }
}
}
4

1 に答える 1

5

これpaintComponent(getGraphics());は、塗装が行われる方法ではありません。コンポーネントをコンテナに追加する方法でもありません。

getGraphics有効なグラフィックス コンテキストが返されることに依存することはできません。メソッドを取り除き、paintComponentコンストラクターから UI を構築するだけです。

(個人的に)これprivate Container contentPane = getContentPane();はもったいない。他の開発者が を呼び出したらどうなりますsetContentPaneか?

nullレイアウト マネージャーは、UI を台無しにすることで有名です。個人的には、1 つまたは複数のレイアウト マネージャーを使用する方がよいでしょう....

そうしないと、問題を再現できないようです...

于 2013-01-14T00:32:40.257 に答える