Tag: swing

在触摸屏上获取Click Count Mouse Listener

我正在运行一个带有JList的简单JFrame。 我遇到了一个问题就像这个人> 触摸屏上的Java getClickCount 我知道它已经发布但没有答案。 jList.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { System.out.println(“MouseClick: “+e.getClickCount()); if (e.getClickCount() == 2) {

Java游戏区域难度

在许多第一人称2D游戏中,会有一个巨大的竞争场地,但是你的计算机上有一个小的显示区域: ++++++++++++++++++++++++++++++++++++ +++++aaaaaa+++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++ +++++aaaaaa+++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++ +++++aaaaaa+++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++ +++++aaaaaa+++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++ 其中“+”是整个比赛场地,“a”是屏幕上的可显示区域。 我想制作一个这样的游戏,按箭头键可以让你在整个运动场上移动。 问题:我是否需要创建一个巨大的JPanel才能实现这一目标? (比屏幕大)

如何使用MVC在CardLayout中的JPanel之间切换?

我正在制作数学游戏应用程序,最近开始实施MVC。 我有以下结构: auiAs2 MigJPanel :扩展JPanel ScreenInterface.java :包含全局变量,字体和难度enum MathsGame.java :扩展JFrame auiAs2.view DiffView.java :扩展MigJPanel实现ScreenInterface MigJPanel :扩展MigJPanel实现ScreenInterface EndGameView.java:扩展MigJPanel实现ScreenInterface auiAs2.controller DiffControl.java GameControl.java EndGameControl.java auiAs2.model Model.java :实现ScreenInterface 我的MathsGame.java包含一个设置为CardLayout的JPanel ,其中添加了DiffView , EndGameView和EndGameView实例。 当我运行程序时,会向用户显示diffView ‘卡’。 如果用户单击“新游戏”,则DiffControl.java的ActionListener DiffControl.java获得所选的难度。 public class DiffControl { private DiffView diffView; private Model model; public DiffControl(DiffView diffView, Model model) { this.diffView = diffView; this.model = model; this.diffView.addNewGameListener(new NewGameListener()); } […]

等待后台进程以不同类的SwingWorker结束

我正在将文件导入项目,一旦用户单击选择此文件,我会做一些事情,包括通过命令行。 我用这种方法完成了它: p = Runtime.getRuntime().exec(command, null, new File(directory)); p.waitFor(); 由于此过程可能需要一些时间,因此我决定在新框架中显示一个进度条弹出窗口,显示当前进程的所有输出。 我跟随@trashgod的代码改编为我的项目。 出于这个问题的目的,让我说我完全按照原样。 我只是想在命令工作时出现这个窗口,然后关闭它自己。 我可以通过从override done方法处理帧来完成此操作。 我的问题是我正在从其他类创建这个类,而在执行它时,它继续使用代码。 例如: method1(); method2(); new SwingWorkerExample().displayGUI(); //Process continues in background method3(); 这里我的method3()正在SwingWorkerExample类的进程完成之前执行。 我该怎么解决这个问题? 我已经尝试过放在displayGUI方法的末尾了: while(!backgroundTask.isDone()){ //do nothing } 但它使整个框架不起作用或者可能冻结它。 我还尝试在backgrandtask类中创建pa全局变量后编写一个方法: public Process getProcess(){ return p; } 然后从displaGUI()调用以下内容: backgroundTask.getProcess().waitFor(); 但它返回一个空指针exception。 在显示命令窗口的输出时,我还能做什么来等待进程结束? 谢谢。 更新:这是链接代码的副本,其中包含一些更改以显示我的意思。 我不希望在进程完成之前打印第二个文本: package mcve; import java.awt.BorderLayout; import java.awt.EventQueue; import […]

使用TransferHandler进行JTable拖放

目前我有两张表Table-A, Table-B 。 我的任务是将行从Table-A拖到Table-B或将Table-B中的行拖到自身上。 使用TransferHandler我已经完成了这项任务。 但我的问题是,我无法识别哪个表行被拖到Table-B ..即,从表-A到表-B或从表-B到自身。 在TransferHandler exportData方法中,我向其中一个列添加了一些额外的数据。 基于此,当我通过importData方法导入数据时,我能够找出它使用我添加数据的特定列来自哪个表。 我知道这根本不推荐..所以我需要知道是否有一个很好的方法来解决这个问题?

为什么Java jFrame setResizable()很难采取行动?

此代码由Netbean 6.8 GUI构建器自动生成。 默认应用程序未包含在jFrame中! 它只在jPanel中,我不知道如何使它无法重新resize。 所以我添加了一个jFrame来包含所有这些,尽管我设置了它的setResizable(); 为假…它仍然重新resize! 这是代码: import org.jdesktop.application.Action; import org.jdesktop.application.ResourceMap; import org.jdesktop.application.SingleFrameApplication; import org.jdesktop.application.FrameView; import org.jdesktop.application.TaskMonitor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Timer; import javax.swing.Icon; import javax.swing.JDialog; import javax.swing.JFrame; public class BOSSConverterView extends FrameView { public BOSSConverterView(SingleFrameApplication app) { super(app); JDialog dlg = new JDialog(); dlg.setUndecorated(true); dlg.setModal(true); dlg.setLayout(new BorderLayout()); ImageIcon img = new ImageIcon(getClass().getResource(“splash.png”)); […]

使用keyPressed检测键盘方向键

G’day全部, 在这里了解到Java控制台不支持键盘输入后,我切换到了Swing和AWT。 我现在的问题是如何检测键盘方向键(非数字小键盘)的使用时间。 按下向下,向上,向左,向右键时,我的代码(下面)不会打印“小方块”字符。 例如,这个小方框字符与CTRL和ALT键使用的字符没有什么不同。 有谁知道键盘方向键的实际身份是什么,以便我可以在我的应用程序中为它们编码? import java.awt.*; import java.awt.event.*; import javax.swing.*; public class KeyChecker extends JFrame { JLabel keyLabel = new JLabel(“Hit any key”); public KeyChecker() { super(“Hit a Key”); setSize(300, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new FlowLayout(FlowLayout.CENTER)); KeyMonitor monitor = new KeyMonitor(this); setFocusable(true); addKeyListener(monitor); add(keyLabel); setVisible(true); } public static void main(String[] arguments) { new KeyChecker(); } […]

使用Swing绘制选择框

我用面板和三个按钮编写了一个应用程序。 我想用鼠标添加选择这个按钮。 我的意思是我们在桌面上的Windows中。 我按下鼠标左键,随着鼠标的移动,区域选择也在增长。 是否有一个特定的接口或我是否有手动调用事件监听器的相应方法,并绘制透明矩形? 这是一张图片: 所以当我使用鼠标拖动绘制矩形时,我有一个问题,按钮正在重新绘制,因此用户可以看到闪烁按钮。 当我画矩形时,我想要这个按钮不要消失。 我认为我需要使用glassPane。 这是我的观念。 我有一个框架。 在框架中我添加了带按钮的面板,我需要另一个面板,我将绘制透明矩形。 我在想,然后我的按钮仍然不会重新粉刷。 你对这个概念有什么看法? 或者也许有人有另一个想法。 这是代码: @Override public void mousePressed(MouseEvent e) { startPoint=e.getPoint(); setOpaque(true); Graphics2D g2 = (Graphics2D)getGraphics(); Rectangle2D prostokat = new Rectangle2D.Double(); prostokat.setFrameFromDiagonal(e.getPoint().x, e.getPoint().y,startPoint.x, startPoint.y); g2.setComposite(AlphaComposite.getInstance(rule, alpha)); g2.draw(prostokat); g2.setColor(Color.BLUE); g2.fill(prostokat); } @Override public void mouseDragged(MouseEvent e) { setOpaque(true); Graphics2D g2 = (Graphics2D)getGraphics(); Rectangle2D prostokat […]

Canvas3D没有出现在Swing窗口中

我试图在Swing JPanel中插入一个Canvas3D对象,但代码似乎没有工作(即没有任何反应): Canvas3D canvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration()); SimpleUniverse universe = new SimpleUniverse(canvas); BranchGroup root = new BranchGroup(); root.addChild(new ColorCube()); universe.addBranchGraph(根); universe.getViewingPlatform()setNominalViewingTransform(); canvasPanel.add(帆布); 我错过了什么? JPanel是使用NetBean的Visual Editor创建的。

如何在添加新行后进行JTable刷新

在我向JTable添加新行之后。 写入的信息转到txt文件,但我的JTable没有显示最后一个原始文件。 但是,如果我关闭程序并再次运行它,那么表中的信息就会出现。 那么,有没有办法刷新JTable的数据而不关闭应用程序并再次运行它? String[] columns = {“nume”, “compozitie”, “indicatii”, “contraindicatii”, “administrare”, “pret”, “compensabil”, “stoc”}; Object[][] data = null; try { File file = new File(“medicamente.txt”); FileReader fileReader = new FileReader(file); BufferedReader bufferedReader = new BufferedReader(fileReader); data = new Object[100][]; String line; int numLines = 0; while ((line = bufferedReader.readLine()) != null) { data[numLines] = […]