2010-04-19 2 views
15

Мне нужно удалить кнопки максимизации и уменьшения с JFrame. Пожалуйста, предложите, как это сделать.Как удалить кнопки максимизации и уменьшения из JFrame?

+0

Взгляните на http://stackoverflow.com/questions/2527021/how-to-disable-minimize-button-in-frame и посмотрите, отвечает ли это на ваш вопрос. –

+0

говорится об использовании JDialog, в myeclipse я импортирую java.awt. *, Но JDialog не распознается. любая помощь по этому поводу? – silverkid

+0

'JDialog' и' JFrame' находятся в пакете 'java.swing'. Вам нужно импортировать java.swing. * '. –

ответ

7
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 

import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class Dlg extends JDialog { 
    public Dlg(JFrame frame, String str) { 
     super(frame, str); 
     addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent evt) { 
       System.exit(0); 
      } 
     }); 
    } 

    public static void main(String[] args) { 
     try { 
      Dlg frame = new Dlg(new JFrame(), "No min max buttons"); 
      JPanel panel = new JPanel(); 
      panel.setSize(200, 200); 
      JLabel lbl = new JLabel("blah blah"); 
      panel.add(lbl); 
      frame.add(panel); 
      frame.setSize(400, 400); 
      frame.setVisible(true); 
     } catch (IllegalArgumentException e) { 
      System.exit(0); 
     } 
    } 
} 
+0

Есть ли какие-либо минусы этого? – iKlsR

+3

Ваш ответ? Вы не объясняете, что делаете, и я не вижу, где вы удаляете кнопки min/max из JFrame. Пока я вижу, где вы собираетесь с этим, мне потребовалось несколько минут, чтобы подумать, как это было ответом. – Aaron

+0

Остерегайтесь, это решение делает его немного сложнее сфокусировать окно. Это диалог, который означает, что он не будет отображаться как открытая программа в Windows. Если пользователь фокусирует другое окно, такое как веб-браузер, чтобы повторно сфокусировать диалог, пользователь должен будет свести к минимуму все другие программы. –

12

Вот пример, связанный с использованием setUndecorated(), чтобы отключить декорации кадров.

alt text

import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import javax.swing.AbstractAction; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class FrameTest implements Runnable { 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new FrameTest()); 
    } 

    @Override 
    public void run() { 
     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setUndecorated(true); 
     JPanel panel = new JPanel(); 
     panel.add(new JLabel("Stackoverflow!")); 
     panel.add(new JButton(new AbstractAction("Close") { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       System.exit(0); 
      } 
     })); 
     f.add(panel); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 
} 
9

Примечание: Первоначально я отредактирован stacker «s ответ, но это было предложено создать новый ответ вместо этого.

Существует несколько способов настройки элементов управления окнами, доступных вашим пользователям.

В настоящее время единственный способ удалить Maximize и кнопок сворачивания, сохраняя при этом в строке заголовка и кнопку закрытия, чтобы использовать JDialog вместо JFrame:

import java.awt.Dimension; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 

import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class DialogDemo { 

    public static void main(String[] args) { 
     JDialog dialog = new JDialog(new JFrame(), "No min max buttons"); 
     // necessary as setDefaultCloseOperation(EXIT_ON_CLOSE) is 
     // not available for JDialogs. 
     dialog.addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent evt) { 
       System.exit(0); 
      } 
     }); 

     JLabel label = new JLabel("blah blah"); 
     JPanel panel = new JPanel(); 
     panel.setPreferredSize(new Dimension(400, 400)); 
     panel.add(label); 

     dialog.add(panel); 
     dialog.pack(); 
     dialog.setVisible(true); 
    } 
} 

диалоговое решение делает невозможным для пользователей чтобы минимизировать и максимизировать окно, в том числе с помощью ярлыков, однако оно не снимает возможности изменения размера окна.

Использование setResizable(false) будет удалять только кнопку максимизации, за счет того, что вы не сможете изменить размер окна.

Наконец, как упоминалось в trashgod, метод setUndecorated(true) отключит декорации кадров, удалив строку заголовка и края окна. Это затрудняет пользователям перетаскивание, изменение размера и закрытие окна, хотя это и невозможно, так как эти действия могут выполняться с помощью сочетаний клавиш.

+0

Это единственный ответ, который фактически отвечает на вопрос. – Aaron

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

  • Нет связанных вопросов^_^