2012-04-21 3 views
0

Я пытаюсь полностью отключить всю картину и освежить на части JFrame. Я получил желаемый эффект на весь JFrame просто перекрывая public void paint(Graphics) вот так:Отключить рисование на JPanel

import javax.swing.*; 

class Test extends JFrame { 

    Test() { 
    setBounds(20,20, 100,100); 
    setVisible(true); 
    } 

    //This disables all painting and refreshing ON A JFRAME. 
    //Just doing this on a JPanel doesn't work. 
    public void paint (Graphics g) {} 

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

    } 

Я хочу, чтобы этот же эффект, но только на определенном участке JFrame. Я хочу иметь возможность добавлять компоненты GUI, как обычно, в остальную часть фрейма. Я попытался отключить двойную буферизацию (с помощью конструктора JPanel), и переопределения следующих метод (расширение как JPanel и JComponent) как так:

public class DontRefresh extends JComponent/JPanel { 
    public void paint (Graphics g) {} 
    public void paintComponent (Graphics g) {} 
    public void repaint() {} 
    public void update (Graphics g) {} 
    public void updateUI() {} 
    } 

и я также попытался отключить обновление с помощью:

DontRefresh component = new DontRefresh(); 
RepaintManager.currentManager(component).markCompletelyClean(component); 

но ничего не получилось.

+1

Ваш желаемый эффект не очень точен. Не могли бы вы рассказать нам, что должно быть видно в вашей некрасивой JPanel: прозрачность или постоянный цвет? в первом случае просто установите setOpaque в false, в последнем просто нарисуйте цвет, который вы хотите на фоне. –

+1

* «Я пытаюсь полностью отключить все рисование и обновление на части JFrame». * Вы пытаетесь умышленно нарушить графический интерфейс? Какую функцию это обеспечивает? –

ответ

5

Ну, не зная точно, что вы делаете, я бы порекомендовал вам иметь «панель наполнителя» (просто JPanel, в которой вы ничего не делаете) в пространстве, в котором вы не хотите, чтобы что-то появлялось, а затем другие панели для всего остального.

Итак, скажите, что у вас есть JFrame. Если вы хотите, чтобы верхний правый угол никогда ничего не отображал, вы могли бы заполнить JFrame четырьмя JPanels, по одному в каждом углу (или 3 с одним слева, один в верхнем правом углу и один в нижнем правом углу). Затем поместите все компоненты качания в другие панели. Я не знаю, выполнит ли это вашу цель, но я не совсем уверен, что вы цель, так что это лучшее, что я могу сделать :) Надеюсь, это поможет!

+1

Я тоже не знаю, что он делает, но я буду голосовать за усилия! –

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