2016-06-05 16 views
0

Ich versuche etwas zu machen, aber mein Label "Geld" erscheint nicht und ich weiß nicht warum. Ich habe versucht, es für eine Weile zu beheben. Das ist mein Code:Warum erscheint mein Etikett nicht? (Java)

 public class main { 
static int amountOM = 200; 
static JFrame jf = new JFrame("Game"); 
static JPanel jp = new JPanel(); 
static JPanel jp2 = new JPanel(); 
static JButton exit = new JButton("Exit"); 
static JLabel money = new JLabel("$ "+amountOM); 


public static void main(String[] args){ 
    start(); 
} 

public static void start() { 


    jf.setLayout(null); 
    jf.pack(); 

    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    jf.setSize(500, 500); 


    jf.setLocationRelativeTo(null); 
    jf.setResizable(false); 

    jp.setLocation(0, 0); 
    jp.setSize(400, 500); 

    jp2.setLocation(400, 0); 
    jp2.setSize(100, 500); 

    exit.setLocation(405, 10); 
    exit.setSize(85,50); 

    money.setLocation(405, 200); 
    money.setSize(100,50); 

    jp2.setBackground(Color.gray); 
    money.setBackground(Color.black); 

    jf.add(jp); 
    jf.add(jp2); 
    jf.add(exit); 
    jf.add(money); 

    jf.setVisible(true); 

} 
} 

Wenn Sie das Problem kennen, bitte sagen Sie mir. Vielen Dank.

(es hält mir zu sagen, dass meine Post meist Code ist und bitte mehr Details so im hier diesen Text hinzufügen)

+0

Ist die Taste angezeigt? – Hackerdarshi

Antwort

1

Sie dabei deine JLabel mit einem JPanel, jp2 genau zu sein. Die Lösung ist jedoch, keine absolute Positionierung und Null-Layouts zu verwenden, da es zu einfach ist, sich selbst in den Fuß zu schießen, genau wie Sie es tun. Wie alle ähnlichen Antworten auf diese Art von Frage Ihnen sagen werden: lernen und verwenden Sie die Layout-Manager.

Während Null-Layouts und setBounds() Swing-Neulinge scheinen wie die einfachste und beste Möglichkeit, komplexe GUI's zu erstellen, desto mehr Swing GUI'S erstellen Sie die ernsteren Schwierigkeiten, die Sie stoßen, wenn Sie sie verwenden. Sie werden die Größe Ihrer Komponenten nicht ändern, wenn die GUI die Größe ändert, sie sind eine royale Hexe, die verbessert oder beibehalten wird, sie scheitern komplett, wenn sie in Scrollpanels platziert werden. Sie sehen auf allen Plattformen oder Bildschirmauflösungen, die sich vom Original unterscheiden, grässlich aus .

Das Layout-Manager-Tutorial finden Sie hier: Layout Manager Tutorial, und Sie finden hier Links zu den Swing-Tutorials und anderen Swing-Ressourcen: Swing Info.

Zum Beispiel:

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 

import javax.swing.*; 

public class Game2 extends JPanel { 

    private static final int BOX_W = 400; 
    private static final int BOX_H = BOX_W; 
    private static final Color SIDE_BG = Color.GRAY; 
    private JLabel moneyLabel = new JLabel("$20.00"); 

    public Game2() { 
     JButton exitButton = new JButton("Exit"); 
     JPanel exitBtnPanel = new JPanel(); 
     exitBtnPanel.add(exitButton); 
     exitBtnPanel.setOpaque(false); 
     int eb = 2; 
     exitBtnPanel.setBorder(BorderFactory.createEmptyBorder(eb, eb, eb, eb)); 

     JPanel moneyPanel = new JPanel(); 
     moneyPanel.add(moneyLabel); 
     moneyPanel.setOpaque(false); 

     JPanel sidePanel = new JPanel(); 
     sidePanel.setBackground(SIDE_BG); 
     sidePanel.setLayout(new BoxLayout(sidePanel, BoxLayout.PAGE_AXIS)); 
     sidePanel.add(exitBtnPanel); 
     sidePanel.add(moneyPanel); 

     setLayout(new BorderLayout()); 
     add(Box.createRigidArea(new Dimension(BOX_W, BOX_H))); 
     add(sidePanel, BorderLayout.LINE_END); 
    } 

    private static void createAndShowGui() { 
     Game2 mainPanel = new Game2(); 

     JFrame frame = new JFrame("Game2"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> createAndShowGui()); 
    } 
} 
Verwandte Themen