package BlackjackPanels;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
public class MainPanel extends JFrame implements ActionListener {
private JPanel background;
public MainPanel() {
super("Alan's Blackjack");
setDefaultCloseOperation(EXIT_ON_CLOSE);
background = new JPanel()
{
@Override
protected void paintComponent(Graphics g)
{
try
{
BufferedImage image = ImageIO.read(new File("C:/Users/Ssangwook/Desktop/programming/javafiles/Blackjack/src/BlackjackImages/blackjackTableResized.jpg"));
super.paintComponent(g);
g.drawImage(image, 0, 0, this);
}
catch (IOException e)
{
e.printStackTrace();
}
}
};
background.setPreferredSize(new Dimension(1000,500));
add(background);
pack();
setLocationRelativeTo(null);
setResizable(false);
//isRunning();
setVisible(true);
}
public void isRunning() {
background.setLayout(new BorderLayout(10, 10));
DealerPanel dealer=new DealerPanel();
background.add(dealer, BorderLayout.LINE_START);
repaint();
}
@Override
public void actionPerformed(ActionEvent a) {
}
public static void main(String [] args) {
MainPanel game=new MainPanel();
game.isRunning();
}
}
Панель дилера
package BlackjackPanels;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
public class DealerPanel extends JPanel {
private JButton hit = new JButton("Hit");
public DealerPanel() {
super();
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
setPreferredSize(new Dimension(100,100));
setOpaque(false);
setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.DARK_GRAY), "DEALER"));
}
protected void askBets() {
}
public void addListener(ActionListener a) {
hit.addActionListener(a);
}
}
Привет, я только начинаю делать блэкджек с графическим интерфейсом. Однако у меня возникла проблема, и я действительно надеялся, что кто-нибудь сможет мне ее объяснить.
Проблема, похоже, связана с repaint() внутри метода isRunning(). Всякий раз, когда я запускаю программу в Eclipse, я получаю панель DealerPanel на своем фоне только в половине случаев. В другой половине случаев, когда панель не отображается, мне приходится сворачивать окно JFrame и снова открывать его, а панель для DealerPanel каким-то образом снова отображается.
Я сделал небольшой поиск самостоятельно и обнаружил, что repaint() просто запрашивает поток AWT для вызова update(), который затем вызывает paint() и, следовательно, не является прямым вызовом для рисования. Кроме того, repaint() может быть проблематичным, так как repaint() только планирует для paint() и немедленно возвращается. Может ли это иметь отношение к моей проблеме?
Подводя итог, моя панель для фона всегда отображается. Однако моя панель для панели дилера не всегда отображается при первом запуске программы. Когда панель дилера не отображается, я прячу и открываю окно, и панель отображается. Кто-нибудь знает причину такого странного поведения?
paint..
! Загрузите его один раз и сохраните ссылку на него. - person Andrew Thompson   schedule 21.03.2014public void isRunning() {
Метод, начинающийся сis
, логически должен возвращатьboolean
, а неvoid
.. - person Andrew Thompson   schedule 21.03.2014dealer.setFocusable(true);
? - person Braj   schedule 21.03.2014