1

2 人のキャラクターが移動するための円形トラックの GUI を作成しています。ボタン配列を使用して構築しましたが、設定するとすぐに次のようになります。

trackButtons[i].setBorderPainted(false);

設定したサイズに関係なく、テキストが消えます。その行をコメントアウトすると、テキストが再び表示されるようになりますが、明らかに境界線が表示され、ボタンが再びボタンのように表示されます。ボタンの境界線を非表示にして、テキストを表示できるようにする方法はありますか?

main.java:

import javax.swing.JFrame;
public class main
{
    public static void main(String[] args)
    {
        UserFrame myFrame = new UserFrame();
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.setSize(600,460);
        myFrame.setVisible(true);
        myFrame.setResizable(false);
    }//End of main
}//End of class main

UserFrame.java:

import javax.swing.*;
import java.awt.BorderLayout;           //Needed for Border Layout
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.Color;                  //Needed for BLING!
import java.awt.Font;
import java.awt.Dimension;              //Needed for Button Dimensions

public class UserFrame extends JFrame
{
    //Variables
    private JLabel messageBox;

    //Layouts
    private JPanel northPanel;
    private JPanel eastPanel;
    private JPanel southPanel;
    private JPanel westPanel;
    private JPanel controlPanel;    //Contains all buttons and what not.

    // Board Pieces Grid
    private JButton[] trackButtons; //Ring of buttons forming track.

    //Game Functions
    private GameFunc gameFunctions;

    //Constructor
    public UserFrame()
    {
        //Construct GUI
        super("Tortoise and Hare Race");
        setLayout(new BorderLayout());

        //Variables
        Color myGreen = new Color(70, 190, 102);
        Font myFont = new Font("Arial", Font.PLAIN, 8);

        //Set size of Button Array
        trackButtons = new JButton[100];
        northPanel = new JPanel();
        eastPanel = new JPanel();
        southPanel = new JPanel();
        westPanel = new JPanel();

        //Set Layout
        northPanel.setLayout(new BoxLayout(northPanel, BoxLayout.LINE_AXIS));
        eastPanel.setLayout(new BoxLayout(eastPanel, BoxLayout.PAGE_AXIS));
        southPanel.setLayout(new BoxLayout(southPanel, BoxLayout.LINE_AXIS));
        westPanel.setLayout(new BoxLayout(westPanel, BoxLayout.PAGE_AXIS));

        for(int i=0; i<50; i++)
        {
            trackButtons[i] = new JButton();
            trackButtons[i].setMinimumSize(new Dimension(20, 20));
            trackButtons[i].setPreferredSize(new Dimension(20, 20));
            trackButtons[i].setMaximumSize(new Dimension(20, 20));
            trackButtons[i].setSize(20,20);
            trackButtons[i].setMargin(new Insets(0,0,0,0));
            trackButtons[i].setBackground(myGreen);
            trackButtons[i].setOpaque(true);
            trackButtons[i].setBorderPainted(false);
            trackButtons[i].setFont(myFont);
            //DEBUG
            trackButtons[i].setText(""+i);
            if(i<30)
                northPanel.add(trackButtons[i]);
            else if(i<50)
                eastPanel.add(trackButtons[i]);
        }

        //Flip count for south and west panel to maintain order!
        for(int i=99; i>=50; i--)
        {
            trackButtons[i] = new JButton();
            trackButtons[i].setMinimumSize(new Dimension(20, 20));
            trackButtons[i].setPreferredSize(new Dimension(20, 20));
            trackButtons[i].setMaximumSize(new Dimension(20, 20));
            trackButtons[i].setMargin(new Insets(0,0,0,0));
            trackButtons[i].setBackground(myGreen);
            trackButtons[i].setOpaque(true);
            trackButtons[i].setBorderPainted(false);
            trackButtons[i].setFont(myFont);
            //DEBUG
            trackButtons[i].setText(""+i);
            if(i>=80)
                westPanel.add(trackButtons[i]);
            else if(i>=50)
                southPanel.add(trackButtons[i]);
        }


        //Add Panels to respective locations
        add(BorderLayout.NORTH, northPanel);
        add(BorderLayout.EAST, eastPanel);
        add(BorderLayout.SOUTH, southPanel);
        add(BorderLayout.WEST, westPanel);
    }//End of constructor method
}//End of userFrame class

前もって感謝します!

編集:私はMacを使用しています.JavaがOS固有のファンキーなことをしている可能性がありますか? ここにスクリーンショットがあります

4

1 に答える 1

0

Mac でしばらくこれを試してみたところ、あなたが見たのとまったく同じ問題が発生しました。

Swing は扱いにくいです。PC ではすべて問題なく動作します (ただし、ボタンのサイズは少し間違っています)。

私はそれを機能させました--ちょっと。JButton の代わりに JLabel を使用してみてください (その他の唯一の変更は、setMargin の呼び出しをコメントアウトし、 horizo​​ntalTextAlignment を CENTER に設定することです。

一般に、swing のトラブルシューティングを行うときは、常に最初に行うことは正しいスレッドにあることを確認することだと今でも言いますが、それが役立つことはめったにありません。 .

于 2012-10-21T02:14:46.703 に答える