2015-03-02 4 views
0

У меня есть строка текста «Рекорд:», и я хочу, чтобы это появилось в нижней части моего JFrame. Когда я пытаюсь увеличить y, текст отображается примерно до 100, а затем, если я хочу его увеличить, он исчезает? Я хочу, чтобы это прошлое 100, хотя ...Строка текста скрыта?

Вот мой код:

package Main; 

import java.awt.Color; 
import java.awt.Cursor; 
import java.awt.Font; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseEvent; 

import javax.swing.JButton; 
import javax.swing.JFrame; 




public class Game { 


public static void main(String[] args) { 

    final JFrame frame = new JFrame("Tennis Game"); 
    frame.setSize(300,400); 
    frame.setResizable(false); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    //Graphics add 
    Menu graphics = new Menu(); 

    frame.add(graphics); 
    graphics.setBounds(0, 0, 300, 100); 

    frame.setLayout(null); 

    //Buttons 
    //Play button 
    final JButton b = new JButton("Play"); 

    b.setFocusPainted(false); 
    b.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 20)); 
    b.setBounds(110,100,80,40); 
    b.setForeground(Color.BLACK); 

    b.addMouseListener(new java.awt.event.MouseAdapter(){ 

     public void mouseEntered(MouseEvent evt) { 
      b.setForeground(Color.RED); 
      b.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); 
     } 

     public void mouseExited(MouseEvent evt) { 
      b.setForeground(Color.BLACK); 
     } 
     public void mouseClicked(MouseEvent evt){ 


     } 

    }); 

    //Exit button 
    final JButton b2 = new JButton("Exit"); 

    b2.setFocusPainted(false); 
    b2.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 20)); 
    b2.setBounds(110, 180, 80, 40); 
    b2.setForeground(Color.BLACK); 

    b2.addActionListener(new ActionListener(){ 

     @Override 
     public void actionPerformed(ActionEvent evt) { 
      System.exit(0); 

     } 



    }); 

    b2.addMouseListener(new java.awt.event.MouseAdapter(){ 

     public void mouseEntered(MouseEvent evt) { 
      b2.setForeground(Color.RED); 
      b2.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); 
     } 

     public void mouseExited(MouseEvent evt) { 
      b2.setForeground(Color.BLACK); 
     } 

    }); 

    //Help Button 
    final JButton b3 = new JButton("Help"); 

    b3.setFocusPainted(false); 
    b3.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 20)); 
    b3.setBounds(110, 140, 80, 40); 
    b3.setForeground(Color.BLACK); 

    b3.addMouseListener(new java.awt.event.MouseAdapter(){ 

     public void mouseEntered(MouseEvent evt) { 
      b3.setForeground(Color.RED); 
      b3.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); 
     } 

     public void mouseExited(MouseEvent evt) { 
      b3.setForeground(Color.BLACK); 
     } 
     public void mouseClicked(MouseEvent evt){ 


     } 

    }); 


    frame.add(b); 
    frame.add(b2); 
    frame.add(b3); 


} 
} 

также:

package Main; 

import java.awt.Color; 
import java.awt.Font; 
import java.awt.*; 
import javax.swing.*; 



public class Menu extends JPanel { 

int highscore = 0; 

public void paintComponent(Graphics g){ 
    super.paintComponent(g); 

    g.setFont(new Font("Arial", Font.BOLD, 30)); 
    g.setColor(Color.BLACK); 
    g.drawString("TENNIS GAME", 40, 60); 

    g.setFont(new Font("Arial", Font.BOLD, 18)); 
    g.setColor(Color.BLACK); 
    g.drawString("Made by Jared Butterfield", 36, 82); 

    //TEXT HERE 
    //TEXT HERE 
    //TEXT HERE 
    g.setFont(new Font("Arial", Font.BOLD, 18)); 
    g.setColor(Color.BLACK); 
    g.drawString("Highscore: "+ highscore, 0, 150); 


} 


} 

Я пытался добавить комментарии, где текст был рекорд для помощи ,

+1

Избегайте использования 'null' макетов, пиксель идеальные макеты - это иллюзия в современном дизайне ui. Слишком много факторов, которые влияют на индивидуальный размер компонентов, ни один из которых вы не можете контролировать. Swing был разработан для работы с менеджерами компоновки в ядре, отбросив их, не будет конца проблем и проблем, которые вы будете тратить все больше времени на исправление. – MadProgrammer

ответ

2

У меня есть строка текста «Рекорд:», и я хочу, чтобы это появилось в нижней части моего JFrame.

Создать JLabel, а затем добавить метку к раме с помощью:

frame.add(label, BorderLayout.SOUTH); 

Это предполагает, что вы используете по умолчанию BorderLayout для кадра, который всегда является хорошей идеей.

Весь ваш другой код для рисования должен быть заменен на JLabels. Снова добавьте метки на панель с помощью соответствующих менеджеров макетов. Прочтите учебник Swing по телефону Layout Managers для получения дополнительной информации и демонстрационного кода, чтобы вы начали.

+0

Спасибо! Это сработало! – CoderofJava

+0

@CoderofJava, пожалуйста. Не забудьте «принять» ответ, чтобы люди знали, что проблема решена. – camickr

1

Давайте начнем с того, что вы используете null макеты, а затем перейти на то, что вы целенаправленно установить границы с Menu компонента graphics.setBounds(0, 0, 300, 100); (100px высокий), но затем окрасить текст в у позиции 150, g.drawString("Highscore: " + highscore, 0, 150);, а затем задаться вопросом, почему он не отображается?

  1. Не используйте null макеты, вы просто просите о проблемах. Используйте соответствующие компоновщикам
  2. Использование JLabel для визуализации текста, это то, что она делает, и делает это хорошо

См Creating a GUI With JFC/Swing, How to Use Labels и Laying Out Components Within a Container для получения более подробной информации

+0

Есть ли макет, который будет выглядеть так, как у меня теперь установлены мои кнопки? – CoderofJava

+0

GridBagLayout, MigLayout, составная компоновка использует GridLayout ... – MadProgrammer

Смежные вопросы